package co.com.travelsoft.ati.entities.ejb;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Stateless;

import co.com.travelsoft.ati.daos.EstadiasDAO;
import co.com.travelsoft.ati.daos.ItinerariosDAO;
import co.com.travelsoft.ati.daos.UsuariosDAO;
import co.com.travelsoft.ati.dto.EstadiaDto;
import co.com.travelsoft.ati.dto.ItinerarioDto;
import co.com.travelsoft.ati.dto.UsuarioDto;
import co.com.travelsoft.ati.entities.Ciudades;
import co.com.travelsoft.ati.entities.Estadias;
import co.com.travelsoft.ati.entities.Itinerarios;
import co.com.travelsoft.ati.entities.Usuarios;
import co.com.travelsoft.ati.exception.TravelSoftException;

/**
 * Session Bean implementation class UsuEJB
 */
@Stateless
public class UsuarioEJB implements UsuarioEJBRemote {

    /**
     * Default constructor. 
     */
    public UsuarioEJB() {
        // TODO Auto-generated constructor stub
    }
    
	/* (non-Javadoc)
	 * @see co.com.travelsoft.ati.entities.ejb.UsuarioEJB#crear(co.com.travelsoft.ati.entities.Usuarios)
	 */
	public void crear(UsuarioDto usuarioDto) throws TravelSoftException{
		Usuarios usuario = new Usuarios(usuarioDto);
		UsuariosDAO.crear(usuario);
	}
	
	/* (non-Javadoc)
	 * @see co.com.travelsoft.ati.entities.ejb.UsuarioEJB#buscarPorId(co.com.travelsoft.ati.entities.Usuarios)
	 */
	public UsuarioDto buscarPorId(UsuarioDto usuarioDto){
		Usuarios usuario = new Usuarios(usuarioDto);
		usuario = UsuariosDAO.buscarPorId(usuario);
		usuarioDto = obtenetUsuarioDto(usuario);
		
		return usuarioDto;
	}    

	public UsuarioDto buscarPorLogin(UsuarioDto usuarioDto){
		Usuarios usuario = new Usuarios(usuarioDto);
		usuario = UsuariosDAO.buscarPorLogin(usuario);
		usuarioDto = obtenetUsuarioDto(usuario);
		return usuarioDto;
	}

	private UsuarioDto obtenetUsuarioDto(Usuarios usuario) {
		UsuarioDto usuarioDto = new UsuarioDto();
		if(usuario!=null && usuario.getCodigo()!=null){
			usuarioDto.setCodigo(usuario.getCodigo());
			usuarioDto.setCorreoelectronico(usuario.getCorreoelectronico());
			usuarioDto.setLogin(usuario.getLogin());
			usuarioDto.setNombre(usuario.getNombre());
			usuarioDto.setPassword(usuario.getPassword());
			usuarioDto.setUltimafechaingreso(usuario.getUltimafechaingreso());
		}
		return usuarioDto;
	}	
	
	/* (non-Javadoc)
	 * @see co.com.travelsoft.ati.entities.ejb.UsuarioEJB#listar()
	 */
	public List<UsuarioDto> listar(){
		
		List<Usuarios> usuarios = UsuariosDAO.listar();
		List<UsuarioDto> usuariosDto = new ArrayList<UsuarioDto>();
		for (Usuarios usuario : usuarios) {
			usuariosDto.add(obtenetUsuarioDto(usuario));
		}
		return usuariosDto;
	}
	
	/* (non-Javadoc)
	 * @see co.com.travelsoft.ati.entities.ejb.UsuarioEJB#actualizar(co.com.travelsoft.ati.entities.Usuarios)
	 */
	public void actualizar(UsuarioDto usuarioDto) throws TravelSoftException{
		Usuarios usuario = new Usuarios(usuarioDto);
		UsuariosDAO.actualizar(usuario);
	}
	
	/* (non-Javadoc)
	 * @see co.com.travelsoft.ati.entities.ejb.UsuarioEJB#borrar(co.com.travelsoft.ati.entities.Usuarios)
	 */
	public void borrar(UsuarioDto usuarioDto) throws TravelSoftException {
		Usuarios usuario = new Usuarios(usuarioDto);
		UsuariosDAO.borrar(usuario);
	}

	@Override
	public List<UsuarioDto> consultarUsuariosInactivos(int numeroDias) {
		
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_YEAR, -numeroDias);
		Date fecha = calendar.getTime();
		
		Timestamp fechaIngresoValida = new Timestamp(fecha.getTime());
		System.out.println(fechaIngresoValida);
		
		List<Usuarios> usuarios = UsuariosDAO.consultarUsuariosInactivos(fechaIngresoValida);
		List<UsuarioDto> usuariosDto = new ArrayList<UsuarioDto>();
		for (Usuarios usuario : usuarios) {
			usuariosDto.add(obtenetUsuarioDto(usuario));
		}
		return usuariosDto;
	}

	@Override
	public void crearItinerario(ItinerarioDto itinerarioDto) throws TravelSoftException {
	
		Itinerarios itinerario = new Itinerarios();
		itinerario.setNombre(itinerarioDto.getNombre());
		
		Usuarios usuario = new Usuarios();
		usuario.setCodigo(itinerarioDto.getUsuarioDto().getCodigo());
		usuario.setNombre(itinerarioDto.getUsuarioDto().getNombre());
		usuario.setLogin(itinerarioDto.getUsuarioDto().getLogin());
		
		itinerario.setUsuarios(usuario);
		
		List<Estadias> listaEstadias = new ArrayList <Estadias>(); 
		
		itinerario.setEstadiasList1(listaEstadias);
		ItinerariosDAO.crear(itinerario);
		
		for (Iterator<EstadiaDto> iterator = itinerarioDto.getEstadiasList().iterator(); iterator.hasNext();) {
			EstadiaDto estadiaDto = iterator.next();
			Estadias estadia = new Estadias(estadiaDto.getFechaLlegada(), estadiaDto.getFechaSalida());
			Ciudades ciudad = new Ciudades();
			ciudad.setCodigo(estadiaDto.getCiudad().getCodigo());
			estadia.setCiudades(ciudad);
			estadia.setItinerarios(itinerario);
			listaEstadias.add(estadia);
			EstadiasDAO.crear(estadia);
		}
		
	}		
	


}
